import { createApp, nextTick } from "vue";
import { createPinia } from "pinia";
import { Quasar, Notify, Dialog, BottomSheet } from "quasar";
import "@quasar/extras/material-icons/material-icons.css";
import "quasar/src/css/index.sass";
import App from "./App.vue";
import { useChatStore } from "./stores/chat";

const app = createApp(App);
const pinia = createPinia();

app.use(pinia);
app.use(Quasar, {
  plugins: {
    Notify,
    Dialog,
    BottomSheet,
  },
});

app.mount("#app");

// 添加全局错误处理，防止未捕获的错误导致应用崩溃
window.addEventListener('error', (event) => {
  console.error('全局错误捕获:', event.error);
  // 不阻止默认行为，让错误正常显示在控制台
  // 但可以在这里添加错误上报逻辑
});

// 添加未捕获的 Promise rejection 处理
window.addEventListener('unhandledrejection', (event) => {
  const reason = event.reason;
  console.error('未捕获的 Promise rejection:', reason);
  
  // 过滤掉不需要处理的错误（如推流管理器清理等）
  if (reason && typeof reason === 'object' && 'message' in reason) {
    const message = (reason as any).message;
    if (message && typeof message === 'string') {
      // 静默处理某些已知的错误
      if (message.includes('推流管理器已被清理')) {
        console.info('推流管理器已被清理，静默处理');
        event.preventDefault();
        return;
      }
    }
  }
  
  // 对于其他错误，不阻止默认行为，让错误正常显示
  // 这样 Quasar 的 Notify 等组件可以正常显示错误提示
  // event.preventDefault(); // 注释掉，让错误正常传播
});

// 在开发环境中，将 store 暴露到 window 对象，方便在控制台中调试
if (import.meta.env.DEV || import.meta.env.MODE === 'development') {
  // 等待应用挂载后再暴露 store
  nextTick(() => {
    const chatStore = useChatStore();
    
    // 暴露到 window 对象
    (window as any).chatStore = chatStore;
    (window as any).useChatStore = useChatStore;
    
    console.log('✅ Chat Store 已暴露到 window 对象');
    console.log('   使用方法: window.chatStore.clearCurrentUserMessagesCache()');
    console.log('   或者: const store = window.useChatStore(); await store.clearCurrentUserMessagesCache()');
  });
}
